Hardware accelerators are becoming widely available with system vendors offering various hybrid architectures. Hardware accelerators are difficult to program and require extensive modifications of the application by specialized users with domain-specific knowledge. In this context, one fundamental issue is determining which applications could take advantage of which type of hardware acceleration. Performance varies across applications and devices, and new languages may be needed to program on the special devices. While hardware acceleration can boost application performance, the process of identifying candidates for acceleration and actually porting the application onto the new hardware are both difficult tasks that require considerable effort and domain-specific knowledge.
Other approaches for predicting application performance on hardware accelerators depend on analytical models for the accelerator performance and/or (manual) discovery of idioms in applications that can benefit from accelerators. Domain-specific expertise and a close examination of the accelerator architecture are needed to build analytical models. In addition, every hardware accelerator needs its own model; usually, it is difficult if not impossible to generalize a model to a class of accelerators. In general, each accelerator needs careful analysis to derive a corresponding analytical model. Identifying idioms in applications that could benefit from accelerators require user input to either express the application using predefined patterns or manually defining patterns to be recognized in the existing application code.